package ec.linde.modulos.proyectos.servicio.impl;

import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import ec.linde.modulos.dao.ProyectoContratistaSecundarioDao;
import ec.linde.modulos.dao.ProyectoDao;
import ec.linde.modulos.dao.ProyectoProformaSecundariaDao;
import ec.linde.modulos.proyectos.servicio.ServicioProyecto;
import ec.linde.modulos.recursos.FuncionesUtiles;
import ec.linde.persistencia.entidades.proyectos.Proyecto;
import ec.linde.persistencia.entidades.proyectos.ProyectoContratistaSecundario;
import ec.linde.persistencia.entidades.proyectos.ProyectoProformaSecundaria;

/**
 * TODO: Agregar descripcion
 * 
 * @FechaCreacion: 29/09/2014
 * @author: Alex Carrillo
 * @FechaModificacion: 29/09/2014
 * @author: Alex Carrillo
 * @version: 1.0
 */
@Stateless
public class ServicioProyectoImpl implements ServicioProyecto {

	@EJB
	private ProyectoDao prodProyectoDao;
	@EJB
	private ProyectoContratistaSecundarioDao proyectoContratistaSecundarioDao;
	@EJB
	private ProyectoProformaSecundariaDao proyectoProformaSecundariaDao;

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#guardar(ec.linde .persistencia.entidades.proyectos.ProdProyecto)
	 */
	@Override
	public void guardar(Proyecto prodProyecto) {
		for (ProyectoContratistaSecundario proyectoContratistaSecundario : prodProyecto.getListaProyectoContratistaSecundario()) {
			proyectoContratistaSecundarioDao.guardar(proyectoContratistaSecundario);
		}
		for (ProyectoProformaSecundaria proyectoProformaSecundaria : prodProyecto.getListaProformaSecundarias()) {
			proyectoProformaSecundariaDao.guardar(proyectoProformaSecundaria);
		}
		prodProyectoDao.guardar(prodProyecto);
		
		actualizarNumero(prodProyecto);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#eliminar(ec. linde.persistencia.entidades.proyectos.ProdProyecto)
	 */
	@Override
	public void eliminar(Proyecto prodProyecto) {
		prodProyectoDao.eliminar(prodProyecto);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#buscarPorId(int)
	 */
	@Override
	public Proyecto buscarPorId(int proyId) {
		return prodProyectoDao.buscarPorId(proyId);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto# obtenerListaPorPagina(int, int, java.lang.String, boolean, java.util.Map)
	 */
	@Override
	public List<Proyecto> obtenerListaPorPagina(int startIndex, int pageSize, String sortField, boolean sortOrder, Map<String, String> filters) {
		return prodProyectoDao.obtenerListaPorPagina(startIndex, pageSize, sortField, sortOrder, filters);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#obtenerListaCombo (java.lang.String, boolean, java.util.Map)
	 */
	@Override
	public List<Proyecto> obtenerListaCombo(String sortField, boolean sortOrder, Map<String, String> filters) {
		return prodProyectoDao.obtenerListaCombo(sortField, sortOrder, filters);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#contarPorCriterio (java.util.Map)
	 */
	@Override
	public int contarPorCriterio(Map<String, String> filters) {
		return prodProyectoDao.contarPorCriterio(filters);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#cargarDetalle (int)
	 */
	@Override
	public Proyecto cargarDetalle(int proyId) {
		return prodProyectoDao.cargarDetalle(proyId);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProyecto#obtenerProyecto(int)
	 */
	@Override
	public Proyecto obtenerProyecto(int idProforma) {
		return prodProyectoDao.obtenerProyecto(idProforma);
	}

	/**
	 * @param proyecto
	 */
	private void actualizarNumero(Proyecto proyecto) {
		int numeroCeros= 9 - (String.valueOf(proyecto.getIdProyecto())).length();
		String numero = FuncionesUtiles.completarNumeroConCerosIzquierda(proyecto.getId(), numeroCeros);
		int anio = FuncionesUtiles.getAnio(proyecto.getFecha());
		proyecto.setNumero(numero + "-" + anio);
		prodProyectoDao.actualizar(proyecto);
	}

}
